zero trust architecture blueprint/zero-trust-architecture-offline-v2/scripts/upload.ps1 (70 lines of code) (raw):

Param( [string] [Parameter(Mandatory = $true)] $ResourcePrefix, [string] $Region = "usgovarizona" ) function Create-ArtifactStorageAccount { param( [Parameter(Mandatory = $True)] [string] $ResourceGroupName, [Parameter(Mandatory = $True)] [string] $Region, [Parameter(Mandatory = $True)] [string] $artifactStorageAccountName ) $existingAccount = (Get-AzStorageAccount | Where-Object { $_.StorageAccountName -eq $artifactStorageAccountName }) if (!$existingAccount) { Write-Host "Creating a new artifact storage account $artifactStorageAccountName" $existingAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName ` -Name $artifactStorageAccountName ` -Location $Region ` -SkuName Standard_GRS ` -Kind Storage ` -EnableHttpsTrafficOnly $true } else { Write-Host "Using existing artifact storage account $artifactStorageAccountName" } } function Upload-Artifacts { param( [Parameter(Mandatory = $True)] [string] $artifactStorageAccountName, [Parameter(Mandatory = $True)] [string] $containerName, [Parameter(Mandatory = $True)] [string] $LocalDirectoryToStage ) $storageAccount = (Get-AzStorageAccount | Where-Object { $_.StorageAccountName -eq $artifactStorageAccountName }) $Container = New-AzStorageContainer -Name $containerName -Context $storageAccount.Context -Permission Container -ErrorAction SilentlyContinue *>&1 $FilesToStage = Get-ChildItem $LocalDirectoryToStage -Recurse -File Write-Host "Found $($FilesToStage.count) file(s) at path $LocalDirectoryToStage" foreach ($FileToStage in $FilesToStage) { # Keep the source folder structure $blobName = ($FileToStage.fullname.Substring($LocalDirectoryToStage.Length)).Replace("\", "/").trim("/") $BlobContent = Set-AzStorageBlobContent -File $FileToStage.FullName -Blob "$blobName" ` -Container $containerName ` -Context $storageAccount.Context ` -BlobType "Block" ` -Force } Write-Host "Uploaded $($FilesToStage.Count) file(s) to Container '$($containerName)' in Storage Account '$($artifactStorageAccountName)'." return $storageAccount.Context.BlobEndPoint + $containerName } $containerName = "artifacts" $artifactStorageAccountName = "$($ResourcePrefix)artifacts" $artifactResourceGroupName = "$($ResourcePrefix)-artifacts" $buildPath = "$PSScriptRoot\dependencies" # Create the artifact storage account and stage the deployment files New-AzResourceGroup -Name $artifactResourceGroupName -Location $Region -Verbose -Force Create-ArtifactStorageAccount -ArtifactStorageAccountName $artifactStorageAccountName -ResourceGroupName $artifactResourceGroupName -Region $Region $deploymentTemplateRoot = Upload-Artifacts -ArtifactStorageAccountName $artifactStorageAccountName -ContainerName $containerName -LocalDirectoryToStage $buildPath Write-Host $deploymentTemplateRoot